'use strict'
var t = require('fs'),
  r = require('path')
function e(t) {
  return t && 'object' == typeof t && 'default' in t ? t : { default: t }
}
var n = e(t),
  o = e(r),
  i =
    'undefined' != typeof globalThis
      ? globalThis
      : 'undefined' != typeof window
      ? window
      : 'undefined' != typeof global
      ? global
      : 'undefined' != typeof self
      ? self
      : {}
var u = (function (t) {
  var r = { exports: {} }
  return t(r, r.exports), r.exports
})(function (t, r) {
  var e = '__lodash_hash_undefined__',
    n = 9007199254740991,
    o = '[object Arguments]',
    u = '[object Function]',
    c = '[object Object]',
    a = /^\[object .+?Constructor\]$/,
    f = /^(?:0|[1-9]\d*)$/,
    s = {}
  ;(s['[object Float32Array]'] =
    s['[object Float64Array]'] =
    s['[object Int8Array]'] =
    s['[object Int16Array]'] =
    s['[object Int32Array]'] =
    s['[object Uint8Array]'] =
    s['[object Uint8ClampedArray]'] =
    s['[object Uint16Array]'] =
    s['[object Uint32Array]'] =
      !0),
    (s[o] =
      s['[object Array]'] =
      s['[object ArrayBuffer]'] =
      s['[object Boolean]'] =
      s['[object DataView]'] =
      s['[object Date]'] =
      s['[object Error]'] =
      s[u] =
      s['[object Map]'] =
      s['[object Number]'] =
      s[c] =
      s['[object RegExp]'] =
      s['[object Set]'] =
      s['[object String]'] =
      s['[object WeakMap]'] =
        !1)
  var l = 'object' == typeof i && i && i.Object === Object && i,
    h = 'object' == typeof self && self && self.Object === Object && self,
    p = l || h || Function('return this')(),
    _ = r && !r.nodeType && r,
    v = _ && t && !t.nodeType && t,
    d = v && v.exports === _,
    y = d && l.process,
    g = (function () {
      try {
        var t = v && v.require && v.require('util').types
        return t || (y && y.binding && y.binding('util'))
      } catch (t) {}
    })(),
    b = g && g.isTypedArray
  function j(t, r, e) {
    switch (e.length) {
      case 0:
        return t.call(r)
      case 1:
        return t.call(r, e[0])
      case 2:
        return t.call(r, e[0], e[1])
      case 3:
        return t.call(r, e[0], e[1], e[2])
    }
    return t.apply(r, e)
  }
  var w,
    O,
    m,
    A = Array.prototype,
    z = Function.prototype,
    M = Object.prototype,
    x = p['__core-js_shared__'],
    C = z.toString,
    F = M.hasOwnProperty,
    U = (w = /[^.]+$/.exec((x && x.keys && x.keys.IE_PROTO) || '')) ? 'Symbol(src)_1.' + w : '',
    S = M.toString,
    I = C.call(Object),
    P = RegExp(
      '^' +
        C.call(F)
          .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
          .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') +
        '$',
    ),
    T = d ? p.Buffer : void 0,
    q = p.Symbol,
    E = p.Uint8Array,
    $ = T ? T.allocUnsafe : void 0,
    D =
      ((O = Object.getPrototypeOf),
      (m = Object),
      function (t) {
        return O(m(t))
      }),
    k = Object.create,
    B = M.propertyIsEnumerable,
    N = A.splice,
    L = q ? q.toStringTag : void 0,
    R = (function () {
      try {
        var t = vt(Object, 'defineProperty')
        return t({}, '', {}), t
      } catch (t) {}
    })(),
    G = T ? T.isBuffer : void 0,
    V = Math.max,
    W = Date.now,
    H = vt(p, 'Map'),
    J = vt(Object, 'create'),
    K = (function () {
      function t() {}
      return function (r) {
        if (!xt(r)) return {}
        if (k) return k(r)
        t.prototype = r
        var e = new t()
        return (t.prototype = void 0), e
      }
    })()
  function Q(t) {
    var r = -1,
      e = null == t ? 0 : t.length
    for (this.clear(); ++r < e; ) {
      var n = t[r]
      this.set(n[0], n[1])
    }
  }
  function X(t) {
    var r = -1,
      e = null == t ? 0 : t.length
    for (this.clear(); ++r < e; ) {
      var n = t[r]
      this.set(n[0], n[1])
    }
  }
  function Y(t) {
    var r = -1,
      e = null == t ? 0 : t.length
    for (this.clear(); ++r < e; ) {
      var n = t[r]
      this.set(n[0], n[1])
    }
  }
  function Z(t) {
    var r = (this.__data__ = new X(t))
    this.size = r.size
  }
  function tt(t, r) {
    var e = Ot(t),
      n = !e && wt(t),
      o = !e && !n && At(t),
      i = !e && !n && !o && Ft(t),
      u = e || n || o || i,
      c = u
        ? (function (t, r) {
            for (var e = -1, n = Array(t); ++e < t; ) n[e] = r(e)
            return n
          })(t.length, String)
        : [],
      a = c.length
    for (var f in t)
      (!r && !F.call(t, f)) ||
        (u &&
          ('length' == f ||
            (o && ('offset' == f || 'parent' == f)) ||
            (i && ('buffer' == f || 'byteLength' == f || 'byteOffset' == f)) ||
            dt(f, a))) ||
        c.push(f)
    return c
  }
  function rt(t, r, e) {
    ;((void 0 !== e && !jt(t[r], e)) || (void 0 === e && !(r in t))) && ot(t, r, e)
  }
  function et(t, r, e) {
    var n = t[r]
    ;(F.call(t, r) && jt(n, e) && (void 0 !== e || r in t)) || ot(t, r, e)
  }
  function nt(t, r) {
    for (var e = t.length; e--; ) if (jt(t[e][0], r)) return e
    return -1
  }
  function ot(t, r, e) {
    '__proto__' == r && R ? R(t, r, { configurable: !0, enumerable: !0, value: e, writable: !0 }) : (t[r] = e)
  }
  ;(Q.prototype.clear = function () {
    ;(this.__data__ = J ? J(null) : {}), (this.size = 0)
  }),
    (Q.prototype.delete = function (t) {
      var r = this.has(t) && delete this.__data__[t]
      return (this.size -= r ? 1 : 0), r
    }),
    (Q.prototype.get = function (t) {
      var r = this.__data__
      if (J) {
        var n = r[t]
        return n === e ? void 0 : n
      }
      return F.call(r, t) ? r[t] : void 0
    }),
    (Q.prototype.has = function (t) {
      var r = this.__data__
      return J ? void 0 !== r[t] : F.call(r, t)
    }),
    (Q.prototype.set = function (t, r) {
      var n = this.__data__
      return (this.size += this.has(t) ? 0 : 1), (n[t] = J && void 0 === r ? e : r), this
    }),
    (X.prototype.clear = function () {
      ;(this.__data__ = []), (this.size = 0)
    }),
    (X.prototype.delete = function (t) {
      var r = this.__data__,
        e = nt(r, t)
      return !(e < 0) && (e == r.length - 1 ? r.pop() : N.call(r, e, 1), --this.size, !0)
    }),
    (X.prototype.get = function (t) {
      var r = this.__data__,
        e = nt(r, t)
      return e < 0 ? void 0 : r[e][1]
    }),
    (X.prototype.has = function (t) {
      return nt(this.__data__, t) > -1
    }),
    (X.prototype.set = function (t, r) {
      var e = this.__data__,
        n = nt(e, t)
      return n < 0 ? (++this.size, e.push([t, r])) : (e[n][1] = r), this
    }),
    (Y.prototype.clear = function () {
      ;(this.size = 0), (this.__data__ = { hash: new Q(), map: new (H || X)(), string: new Q() })
    }),
    (Y.prototype.delete = function (t) {
      var r = _t(this, t).delete(t)
      return (this.size -= r ? 1 : 0), r
    }),
    (Y.prototype.get = function (t) {
      return _t(this, t).get(t)
    }),
    (Y.prototype.has = function (t) {
      return _t(this, t).has(t)
    }),
    (Y.prototype.set = function (t, r) {
      var e = _t(this, t),
        n = e.size
      return e.set(t, r), (this.size += e.size == n ? 0 : 1), this
    }),
    (Z.prototype.clear = function () {
      ;(this.__data__ = new X()), (this.size = 0)
    }),
    (Z.prototype.delete = function (t) {
      var r = this.__data__,
        e = r.delete(t)
      return (this.size = r.size), e
    }),
    (Z.prototype.get = function (t) {
      return this.__data__.get(t)
    }),
    (Z.prototype.has = function (t) {
      return this.__data__.has(t)
    }),
    (Z.prototype.set = function (t, r) {
      var e = this.__data__
      if (e instanceof X) {
        var n = e.__data__
        if (!H || n.length < 199) return n.push([t, r]), (this.size = ++e.size), this
        e = this.__data__ = new Y(n)
      }
      return e.set(t, r), (this.size = e.size), this
    })
  var it,
    ut = function (t, r, e) {
      for (var n = -1, o = Object(t), i = e(t), u = i.length; u--; ) {
        var c = i[it ? u : ++n]
        if (!1 === r(o[c], c, o)) break
      }
      return t
    }
  function ct(t) {
    return null == t
      ? void 0 === t
        ? '[object Undefined]'
        : '[object Null]'
      : L && L in Object(t)
      ? (function (t) {
          var r = F.call(t, L),
            e = t[L]
          try {
            t[L] = void 0
            var n = !0
          } catch (t) {}
          var o = S.call(t)
          n && (r ? (t[L] = e) : delete t[L])
          return o
        })(t)
      : (function (t) {
          return S.call(t)
        })(t)
  }
  function at(t) {
    return Ct(t) && ct(t) == o
  }
  function ft(t) {
    return (
      !(
        !xt(t) ||
        (function (t) {
          return !!U && U in t
        })(t)
      ) &&
      (zt(t) ? P : a).test(
        (function (t) {
          if (null != t) {
            try {
              return C.call(t)
            } catch (t) {}
            try {
              return t + ''
            } catch (t) {}
          }
          return ''
        })(t),
      )
    )
  }
  function st(t) {
    if (!xt(t))
      return (function (t) {
        var r = []
        if (null != t) for (var e in Object(t)) r.push(e)
        return r
      })(t)
    var r = yt(t),
      e = []
    for (var n in t) ('constructor' != n || (!r && F.call(t, n))) && e.push(n)
    return e
  }
  function lt(t, r, e, n, o) {
    t !== r &&
      ut(
        r,
        function (i, u) {
          if ((o || (o = new Z()), xt(i)))
            !(function (t, r, e, n, o, i, u) {
              var a = gt(t, e),
                f = gt(r, e),
                s = u.get(f)
              if (s) return void rt(t, e, s)
              var l = i ? i(a, f, e + '', t, r, u) : void 0,
                h = void 0 === l
              if (h) {
                var p = Ot(f),
                  _ = !p && At(f),
                  v = !p && !_ && Ft(f)
                ;(l = f),
                  p || _ || v
                    ? Ot(a)
                      ? (l = a)
                      : Ct((j = a)) && mt(j)
                      ? (l = (function (t, r) {
                          var e = -1,
                            n = t.length
                          r || (r = Array(n))
                          for (; ++e < n; ) r[e] = t[e]
                          return r
                        })(a))
                      : _
                      ? ((h = !1),
                        (l = (function (t, r) {
                          if (r) return t.slice()
                          var e = t.length,
                            n = $ ? $(e) : new t.constructor(e)
                          return t.copy(n), n
                        })(f, !0)))
                      : v
                      ? ((h = !1),
                        (d = f),
                        (y = !0
                          ? ((g = d.buffer), (b = new g.constructor(g.byteLength)), new E(b).set(new E(g)), b)
                          : d.buffer),
                        (l = new d.constructor(y, d.byteOffset, d.length)))
                      : (l = [])
                    : (function (t) {
                        if (!Ct(t) || ct(t) != c) return !1
                        var r = D(t)
                        if (null === r) return !0
                        var e = F.call(r, 'constructor') && r.constructor
                        return 'function' == typeof e && e instanceof e && C.call(e) == I
                      })(f) || wt(f)
                    ? ((l = a),
                      wt(a)
                        ? (l = (function (t) {
                            return (function (t, r, e, n) {
                              var o = !e
                              e || (e = {})
                              var i = -1,
                                u = r.length
                              for (; ++i < u; ) {
                                var c = r[i],
                                  a = n ? n(e[c], t[c], c, e, t) : void 0
                                void 0 === a && (a = t[c]), o ? ot(e, c, a) : et(e, c, a)
                              }
                              return e
                            })(t, Ut(t))
                          })(a))
                        : (xt(a) && !zt(a)) ||
                          (l = (function (t) {
                            return 'function' != typeof t.constructor || yt(t) ? {} : K(D(t))
                          })(f)))
                    : (h = !1)
              }
              var d, y, g, b
              var j
              h && (u.set(f, l), o(l, f, n, i, u), u.delete(f))
              rt(t, e, l)
            })(t, r, u, e, lt, n, o)
          else {
            var a = n ? n(gt(t, u), i, u + '', t, r, o) : void 0
            void 0 === a && (a = i), rt(t, u, a)
          }
        },
        Ut,
      )
  }
  function ht(t, r) {
    return bt(
      (function (t, r, e) {
        return (
          (r = V(void 0 === r ? t.length - 1 : r, 0)),
          function () {
            for (var n = arguments, o = -1, i = V(n.length - r, 0), u = Array(i); ++o < i; ) u[o] = n[r + o]
            o = -1
            for (var c = Array(r + 1); ++o < r; ) c[o] = n[o]
            return (c[r] = e(u)), j(t, this, c)
          }
        )
      })(t, r, Pt),
      t + '',
    )
  }
  var pt = R
    ? function (t, r) {
        return R(t, 'toString', {
          configurable: !0,
          enumerable: !1,
          value:
            ((e = r),
            function () {
              return e
            }),
          writable: !0,
        })
        var e
      }
    : Pt
  function _t(t, r) {
    var e,
      n,
      o = t.__data__
    return (
      'string' == (n = typeof (e = r)) || 'number' == n || 'symbol' == n || 'boolean' == n
        ? '__proto__' !== e
        : null === e
    )
      ? o['string' == typeof r ? 'string' : 'hash']
      : o.map
  }
  function vt(t, r) {
    var e = (function (t, r) {
      return null == t ? void 0 : t[r]
    })(t, r)
    return ft(e) ? e : void 0
  }
  function dt(t, r) {
    var e = typeof t
    return !!(r = null == r ? n : r) && ('number' == e || ('symbol' != e && f.test(t))) && t > -1 && t % 1 == 0 && t < r
  }
  function yt(t) {
    var r = t && t.constructor
    return t === (('function' == typeof r && r.prototype) || M)
  }
  function gt(t, r) {
    if (('constructor' !== r || 'function' != typeof t[r]) && '__proto__' != r) return t[r]
  }
  var bt = (function (t) {
    var r = 0,
      e = 0
    return function () {
      var n = W(),
        o = 16 - (n - e)
      if (((e = n), o > 0)) {
        if (++r >= 800) return arguments[0]
      } else r = 0
      return t.apply(void 0, arguments)
    }
  })(pt)
  function jt(t, r) {
    return t === r || (t != t && r != r)
  }
  var wt = at(
      (function () {
        return arguments
      })(),
    )
      ? at
      : function (t) {
          return Ct(t) && F.call(t, 'callee') && !B.call(t, 'callee')
        },
    Ot = Array.isArray
  function mt(t) {
    return null != t && Mt(t.length) && !zt(t)
  }
  var At =
    G ||
    function () {
      return !1
    }
  function zt(t) {
    if (!xt(t)) return !1
    var r = ct(t)
    return r == u || '[object GeneratorFunction]' == r || '[object AsyncFunction]' == r || '[object Proxy]' == r
  }
  function Mt(t) {
    return 'number' == typeof t && t > -1 && t % 1 == 0 && t <= n
  }
  function xt(t) {
    var r = typeof t
    return null != t && ('object' == r || 'function' == r)
  }
  function Ct(t) {
    return null != t && 'object' == typeof t
  }
  var Ft = b
    ? (function (t) {
        return function (r) {
          return t(r)
        }
      })(b)
    : function (t) {
        return Ct(t) && Mt(t.length) && !!s[ct(t)]
      }
  function Ut(t) {
    return mt(t) ? tt(t, !0) : st(t)
  }
  var St,
    It =
      ((St = function (t, r, e) {
        lt(t, r, e)
      }),
      ht(function (t, r) {
        var e = -1,
          n = r.length,
          o = n > 1 ? r[n - 1] : void 0,
          i = n > 2 ? r[2] : void 0
        for (
          o = St.length > 3 && 'function' == typeof o ? (n--, o) : void 0,
            i &&
              (function (t, r, e) {
                if (!xt(e)) return !1
                var n = typeof r
                return !!('number' == n ? mt(e) && dt(r, e.length) : 'string' == n && (r in e)) && jt(e[r], t)
              })(r[0], r[1], i) &&
              ((o = n < 3 ? void 0 : o), (n = 1)),
            t = Object(t);
          ++e < n;

        ) {
          var u = r[e]
          u && St(t, u, e, o)
        }
        return t
      }))
  function Pt(t) {
    return t
  }
  t.exports = It
})
const c = Object.prototype.hasOwnProperty,
  a = (t, r) => c.call(t, r)
class f {
  constructor({ pluginId: t, defaultConfig: r = {}, customMerge: e, root: n }) {
    ;(this.pluginId = t),
      (this.defaultConfig = r),
      (this.pluginConfigPath = o.default.resolve(n || __dirname, t)),
      (this.customMerge = e),
      (this._config = void 0)
  }
  resolve(t) {
    return o.default.resolve(this.pluginConfigPath, t)
  }
  hasFile(t) {
    return n.default.existsSync(this.resolve(t))
  }
  requireFile(t) {
    try {
      return require(this.resolve(t))
    } catch (t) {
      if ('MODULE_NOT_FOUND' === t.code) return
      throw t
    }
  }
  _getUserConfig() {
    return this.requireFile('config.json')
  }
  config(t, r) {
    if (!this._config) {
      const t = this._getUserConfig()
      this._config = Array.isArray(t) ? t : (this.customMerge || u)(this.defaultConfig, t)
    }
    let e = this._config
    return t
      ? (function (t, r, e) {
          if ('number' == typeof r) return t[r]
          if ('symbol' == typeof r) return a(t, r) ? t[r] : e
          const n =
            'string' != typeof (o = r)
              ? o
              : o.split('.').reduce((t, r) => (r.split(/\[([^}]+)\]/g).forEach((r) => r && t.push(r)), t), [])
          var o
          let i = t
          for (let t = 0; t < n.length; t++) {
            const r = n[t]
            if (!a(i, r)) return e
            i = i[r]
          }
          return i
        })(e, t, r)
      : e
  }
}
const s = new (class {
  constructor() {
    this._configMap = new Map()
  }
  plugin({ pluginId: t, defaultConfig: r, customMerge: e, root: n = __dirname, cache: o = !0 }) {
    if (this._configMap.has(t) && o) return this._configMap.get(t)
    const i = new f({ pluginId: t, defaultConfig: r, customMerge: e, root: n })
    return o && this._configMap.set(t, i), i
  }
})()
var l = s.plugin.bind(s)
module.exports = l
